﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using MySql.Data.MySqlClient;

namespace AutoStar
{
    public partial class NoviDobavljac : Form
    {
        private Dictionary<string, int> drzavaHash = new Dictionary<string,int>();//kad popunjavam combo boksove uzmem i id ujedno
        private Dictionary<string, int> mjestoHash = new Dictionary<string,int>();//                  =||=


        public NoviDobavljac()
        {
            InitializeComponent();
        }


        private void NoviDobavljac_Load(object sender, EventArgs e)
        {
            popuniMjesta();//popuni kombo boksove
            popuniDrzave();
        }


        //dugme odustani
        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        
        //dugme sacuvaj i zavrsi
        private void button2_Click(object sender, EventArgs e)
        {
            if (upisano())
            {
                sacuvajDobavljaca();
                this.Close();
            }
            else MessageBox.Show("Niste unijeli sve potrebne podatke!", "Greska", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }


        //dugme sacuvaj i dodaj novog
        private void button4_Click(object sender, EventArgs e)
        {
            if (upisano())
            {
                sacuvajDobavljaca();
                
                //ocisti unose
                textBox1.Text = ""; 
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
                textBox5.Text = "";
                textBox6.Text = "";
                textBox7.Text = "";
                textBox9.Text = "";
                textBox10.Text = "";
                comboBox1.SelectedIndex = 0;
                comboBox2.SelectedIndex = 0;

            }
            else MessageBox.Show("Niste unijeli sve potrebne podatke!", "Greska", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }


        private int kontakt()
        {
            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza a1 = new AutoStarBaza(conn);

            kontakt kon= new kontakt();
            kon.ziroRacun=textBox5.Text;
            kon.adresa=textBox6.Text+" "+textBox7.Text;
            kon.mjestoid=Convert.ToInt32(mjestoHash[comboBox1.SelectedItem.ToString()]);//uzmi id mjesta iz hasha (HashMap iz jave...) odozgo
            kon.email = textBox10.Text;

            a1.kontakt.InsertOnSubmit(kon);
            a1.SubmitChanges();

            var k = (from kont in a1.kontakt select kont).Last();//uzmi zadnji unos tj. id kontakta
                  
            ConnectionPool.checkInConnection(conn);

            return k.id;//vrati id kontakta

        }


        private void sacuvajDobavljaca() 
        {
            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza a1 = new AutoStarBaza(conn);

            //sacuvaj drzavu
            //sacuvaj mjesto
            //sacuvaj kontakt            

            int idKontakta = kontakt();

            //sacuvaj telefon
            telefon tel = new telefon();
            tel.broj = textBox9.Text;
            tel.tip = 1;
            tel.kontaktid = idKontakta;
            
            dobavljac dob = new dobavljac();
            dob.sifra = textBox1.Text;
            dob.naziv = textBox2.Text;
            dob.pib = textBox3.Text;
            dob.jib = textBox4.Text;
            dob.kontaktid = idKontakta;

            a1.telefon.InsertOnSubmit(tel);
            a1.dobavljac.InsertOnSubmit(dob);
            a1.SubmitChanges();

            ConnectionPool.checkInConnection(conn);
        }


        //kad se selektuje neko drugo mjesto da se upise postanski broj odmah
        private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
        {
            upisiPostu();
        }


        //kombo boks mjesta
        private void popuniMjesta() 
        { 
            comboBox1.Items.Clear();
            mjestoHash.Clear();

            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza a1 = new AutoStarBaza(conn);
            
            var m = from mje in a1.mjesto
                    orderby mje.naziv ascending
                    select new
                    {
                        Id = mje.id,
                        Naziv = mje.naziv
                    };
            foreach (var mjes in m)
            {
                comboBox1.Items.Add(mjes.Naziv);
                mjestoHash.Add(mjes.Naziv, mjes.Id);//dodaj u dictionary odozgo radi id-a kasnije
            }

            if (comboBox1.Items.Count > 0)
            {
                comboBox1.SelectedIndex = 0;
            }

            upisiPostu();
            ConnectionPool.checkInConnection(conn);
        }


        //kombo boks drzava
        private void popuniDrzave()
        {
            comboBox2.Items.Clear();
            drzavaHash.Clear();

            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza a1 = new AutoStarBaza(conn);

            var d = from drz in a1.drzava
                    orderby drz.naziv ascending
                    select new
                    {
                        Id = drz.id,
                        Naziv = drz.naziv
                    };
            foreach (var drz in d)
            {
                comboBox2.Items.Add(drz.Naziv);
                drzavaHash.Add(drz.Naziv, drz.Id);//dodaj u dictionary odozgo radi id-a kasnije
            }

            if (comboBox2.Items.Count > 0)
            {
                comboBox2.SelectedIndex = 0;
            }

            ConnectionPool.checkInConnection(conn);
        }

        //validacija da je sve popunjeno
        private bool upisano()
        {
            if (textBox1.Text != "" || textBox2.Text != "" || textBox3.Text != "" || textBox4.Text != "" ||
                textBox5.Text != "" || textBox6.Text != "" || textBox7.Text != "" || textBox9.Text != "" || 
                textBox10.Text != "" || comboBox1.SelectedValue != null || comboBox2.SelectedValue != null)
            {
                return true;
            }
            else return false;
        }


        //+ dugme dodaj novo mjesto
        private void button1_Click(object sender, EventArgs e)
        {
            //proslijedi mu i id selektovane drzave za unos (iako samo iz BIH nabavljamo)
            NovoMjesto ng = new NovoMjesto(Convert.ToInt32(drzavaHash[comboBox2.SelectedItem.ToString()]));
            ng.ShowDialog();
            if (ng.DialogResult != DialogResult.Cancel)
            {
                popuniMjesta();
                comboBox1.SelectedItem = ng.nazivMjesta;
                upisiPostu();
            }
            popuniMjesta();
            upisiPostu();
        }
    
        private void upisiPostu()
        {
            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza a1 = new AutoStarBaza(conn);

            int id = mjestoHash[comboBox1.SelectedItem.ToString()]; //opet se sluzim hashom (ostalo iz jave)

            var m = (from mje in a1.mjesto
                    where mje.id == id
                    select mje).FirstOrDefault(); //nadji prvi koji odgovara (u sustini jedan samo ima)

            textBox11.Text = m.brojPoste;//popuni broj poste u text boks

            ConnectionPool.checkInConnection(conn);
        }
                    
    }
}
